﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;

namespace SoManyQQNumber
{
    public class MyRSA
    {
        private static string publicKey =

    "<RSAKeyValue><Modulus>6CdsXgYOyya/yQH" +

    "TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L" +

    "wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx" +

    "PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE" +

    "/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP" +

    "w9YRXiac=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";

        private static string privateKey =

            "<RSAKeyValue><Modulus>6CdsXgYOyya/yQH" +

            "TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L" +

            "wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx" +

            "PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE" +

            "/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP" +

            "w9YRXiac=</Modulus><Exponent>AQAB</Exponent>" +

            "<P>/aoce2r6tonjzt1IQI6FM4ysR40j/gKvt4d" +

            "L411pUop1Zg61KvCm990M4uN6K8R/DUvAQdrRd" +

            "VgzvvAxXD7ESw==</P><Q>6kqclrEunX/fmOle" +

            "VTxG4oEpXY4IJumXkLpylNR3vhlXf6ZF9obEpG" +

            "lq0N7sX2HBxa7T2a0WznOAb0si8FuelQ==</Q>" +

            "<DP>3XEvxB40GD5v/Rr4BENmzQW1MBFqpki6FU" +

            "GrYiUd2My+iAW26nGDkUYMBdYHxUWYlIbYo6Te" +

            "zc3d/oW40YqJ2Q==</DP><DQ>LK0XmQCmY/ArY" +

            "gw2Kci5t51rluRrl4f5l+aFzO2K+9v3PGcndjA" +

            "StUtIzBWGO1X3zktdKGgCLlIGDrLkMbM21Q==</DQ><InverseQ>" +

            "GqC4Wwsk2fdvJ9dmgYlej8mTDBWg0Wm6aqb5kjn" +

            "cWK6WUa6CfD+XxfewIIq26+4Etm2A8IAtRdwPl4" +

            "aPjSfWdA==</InverseQ><D>a1qfsDMY8DSxB2D" +

            "Cr7LX5rZHaZaqDXdO3GC01z8dHjI4dDVwOS5ZFZ" +

            "s7MCN3yViPsoRLccnVWcLzOkSQF4lgKfTq3IH40" +

            "H5N4gg41as9GbD0g9FC3n5IT4VlVxn9ZdW+WQry" +

            "oHdbiIAiNpFKxL/DIEERur4sE1Jt9VdZsH24CJE=</D></RSAKeyValue>";



        static public string Decrypt(string base64code)
        {

            try
            {



                //Create a UnicodeEncoder to convert between byte array and string.

                UnicodeEncoding ByteConverter = new UnicodeEncoding();



                //Create a new instance of RSACryptoServiceProvider to generate

                //public and private key data.

                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

                RSA.FromXmlString(privateKey);



                byte[] encryptedData;

                byte[] decryptedData;

                encryptedData = Convert.FromBase64String(base64code);



                //Pass the data to DECRYPT, the private key information 

                //(using RSACryptoServiceProvider.ExportParameters(true),

                //and a boolean flag specifying no OAEP padding.

                decryptedData = RSADecrypt(

                    encryptedData, RSA.ExportParameters(true), false);



                //Display the decrypted plaintext to the console. 

                return ByteConverter.GetString(decryptedData);

            }

            catch (Exception exc)
            {

                //Exceptions.LogException(exc);

                Console.WriteLine(exc.Message);

                return "";

            }

        }



        static public string Encrypt(string toEncryptString)
        {

            try
            {

                //Create a UnicodeEncoder to convert between byte array and string.

                UnicodeEncoding ByteConverter = new UnicodeEncoding();



                //Create byte arrays to hold original, encrypted, and decrypted data.

                byte[] dataToEncrypt =

                    ByteConverter.GetBytes(toEncryptString);

                byte[] encryptedData;

                byte[] decryptedData;



                //Create a new instance of RSACryptoServiceProvider to generate

                //public and private key data.

                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();



                RSA.FromXmlString(privateKey);



                //Pass the data to ENCRYPT, the public key information 

                //(using RSACryptoServiceProvider.ExportParameters(false),

                //and a boolean flag specifying no OAEP padding.

                encryptedData = RSAEncrypt(

                    dataToEncrypt, RSA.ExportParameters(false), false);



                string base64code = Convert.ToBase64String(encryptedData);

                return base64code;

            }

            catch (Exception exc)
            {

                //Catch this exception in case the encryption did

                //not succeed.

                //Exceptions.LogException(exc);

                Console.WriteLine(exc.Message);

                return "";

            }







        }



        static private byte[] RSAEncrypt(

            byte[] DataToEncrypt,

            RSAParameters RSAKeyInfo,

            bool DoOAEPPadding)
        {

            try
            {

                //Create a new instance of RSACryptoServiceProvider.

                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();



                //Import the RSA Key information. This only needs

                //toinclude the public key information.

                RSA.ImportParameters(RSAKeyInfo);



                //Encrypt the passed byte array and specify OAEP padding.  

                //OAEP padding is only available on Microsoft Windows XP or

                //later.  

                return RSA.Encrypt(DataToEncrypt, DoOAEPPadding);

            }

            //Catch and display a CryptographicException  

            //to the console.

            catch (CryptographicException e)
            {

                //Exceptions.LogException(e);

                Console.WriteLine(e.Message);



                return null;

            }



        }



        static private byte[] RSADecrypt(

            byte[] DataToDecrypt,

            RSAParameters RSAKeyInfo,

            bool DoOAEPPadding)
        {

            try
            {

                //Create a new instance of RSACryptoServiceProvider.

                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();



                //Import the RSA Key information. This needs

                //to include the private key information.

                RSA.ImportParameters(RSAKeyInfo);



                //Decrypt the passed byte array and specify OAEP padding.  

                //OAEP padding is only available on Microsoft Windows XP or

                //later.  

                return RSA.Decrypt(DataToDecrypt, DoOAEPPadding);

            }

            //Catch and display a CryptographicException  

            //to the console.

            catch (CryptographicException e)
            {

                //Exceptions.LogException(e);

                Console.WriteLine(e.Message);



                return null;

            }
        }

    }
}

